package com.study.happystudy.service;

import com.study.happystudy.po.Course;
import com.study.happystudy.po.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface CourseService {

    /*
    NMBD_list:
        1. 新建课程
        2. 根据id删除课程
        3. 老师对课程信息修改(除id、任课老师外)
        4. 查询报名该课程的学生(按照加入日期排序)
        5. 增加学生
        6. 删除学生
        7. 根据 科目 返回课程列表(开课时间排序)
        8. 根据 年级、科目 返回课程列表(开课时间排序)
        9. 根据 年级 返回课程列表(开课时间排序)
        10. 搜索框
        11. 通过老师姓名查他吗的课程
        12. 查找某个学生在不在某课程中
    */
    boolean insertCourse(
            int userId,
            String courseName,
            String courseDescription,
            String imgUrl,
            String startTime,
            String endTime,
            int duration,
            int grade,
            int subjectId,
            String classTime,
            String type
    );

    // 根据id删除课程
    boolean deleteCourseById(int courseId);

    // 老师对课程信息修改(除id、任课老师外)
    boolean updateCourse(int courseId, String courseName, String courseDescription,String imgUrl,
                         String startTime, String endTime, int duration,
                         int grade, int subjectId, String classTime,String type);

    // 查询报名该课程的学生(按照加入日期排序)
    List<User> selectStudentsByCourseId(int courseId);

    // 从课程中删除学生
    int deleteStudentFromCourse(int courseId, int userId);

    // 根据科目返回课程列表(开课时间排序)
    List<Course> selectCoursesBySubject(int subjectId);

    // 根据年级、科目返回课程列表(开课时间排序)
    List<Course> selectCoursesByGradeAndSubject(int grade, int subjectId);

    // 根据年级返回课程列表(开课时间排序)
    List<Course> selectCoursesByGrade(int grade);

    // 搜索框:通过搜索的关键词来显示出包含关键词的课程名、课程简介、老师名字的课程
    List<Course> searchByTerm(String searchTerm);

    //根据id找课程
    Course findCourseById(@Param("course_id") int courseId);

    // 通过老师姓名查他吗的课程
    List<Course> searchCourseByTeacherName(@Param("teacherName") String teacherName);

    // 用户收藏课程
    void collectCourses(@Param("user_id") int userId,@Param("course_id") int courseId);

    // 返回用户收藏的所有课程
    List<Course> getUserFavorites(@Param("user_id") int userId);

    // 某个课程是否被收藏
    boolean isFavorites(@Param("course_id") int courseId, @Param("user_id") int userId);
    void cancelCollectCourses(int userId, int courseId);
}
